package com.reminiscence.database;

import java.util.ArrayList;
import java.util.HashMap;

import org.apache.http.NameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.reminiscence.classes.Storia;
import com.reminiscence.classes.Suggerimento;
import com.reminiscence.classes.Utente;
import com.reminiscence.main.ListaStorie;
import com.reminiscence.main.ListaSuggerimenti;
import com.reminiscence.main.ListaUtenti;
import com.reminiscence.main.MainActivity;
import com.reminiscence.main.ProfiloAmico;
import com.reminiscence.main.RicercaUtente;

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.BitmapFactory;

import android.os.AsyncTask;
import android.util.Base64;
import android.util.Log;

public class OperazioniDB extends AsyncTask<String, Integer, Object>
{
	private Activity activity = null;
	private ArrayList<NameValuePair> params;
	private String op = "";
	private ProgressDialog pDialog;
	private String phpScript = "";
	private String dialogMessage = "";
	private JSONParser jsonParser = new JSONParser();
	private Object retVal; 
	
	private final String TAG_SUCCESS = "success";
	
	public OperazioniDB(Activity activity, String op, ArrayList<NameValuePair> params)
	{
		this.op = op;
		this.activity = activity;
		this.params = params;
		
		if (this.op.equals("login"))
		{
			phpScript = "http://remin.site90.com/logIn.php";
			dialogMessage = "Connessione in corso";
			Log.i("Info: ", this.op);
		}
		
		if (this.op.equals("connessione"))
		{
			phpScript = "http://remin.site90.com/checkDBConn.php";
			dialogMessage = "Check connessione in corso";
			Log.i("Info: ", this.op);
		}
		
		if (this.op.equals("logout"))
		{
			phpScript = "http://remin.site90.com/logOut.php";
			dialogMessage = "Disconnessione in corso";
			Log.i("Info: ", this.op);
		}
		
		if (this.op.equals("registrazione"))
		{
			phpScript = "http://remin.site90.com/creaUtente.php";
			dialogMessage = "Registrazione in corso";
			Log.i("Info: ", this.op);
		}
		
		if (this.op.equals("leggiUtente") || this.op.equals("leggiAmico"))
		{
			phpScript = "http://remin.site90.com/datiUtente.php";
			dialogMessage = "Recupero dati utente in corso";
			Log.i("Info: ", this.op);
		}
		
		if (this.op.equals("aggiornaProfilo"))
		{
			phpScript = "http://remin.site90.com/aggiornaProfilo.php";
			dialogMessage = "Aggiornamento profilo in corso";
			Log.i("Info: ", this.op);
		}
		
		if(this.op.equals("modificaProfilo"))
		{
			phpScript = "http://remin.site90.com/modificaProfilo.php";
			dialogMessage = "Modifica profilo in corso";
			Log.i("Info: ", this.op);
		}
		
		if(this.op.equals("leggiStoria"))
		{
			phpScript = "http://remin.site90.com/leggiStoria.php";
			dialogMessage = "Recupero Storia in corso";
			Log.i("Info: ", this.op);
		}
		
		if(this.op.equals("inserisciStoria"))
		{
			phpScript = "http://remin.site90.com/inserisciStoria.php";
			dialogMessage = "Inserimento Storia in corso";
			Log.i("Info: ", this.op);
		}
		
		if(this.op.equals("eliminaStoria"))
		{
			phpScript = "http://remin.site90.com/cancellaStoria.php";
			dialogMessage = "Cancellazione Storia in corso";
			Log.i("Info: ", this.op);
		}
		
		if(this.op.equals("modificaStoria"))
		{
			phpScript = "http://remin.site90.com/modificaStoria.php";
			dialogMessage = "Modifica Storia in corso";
			Log.i("Info: ", this.op);
		}
		if(this.op.equals("listaStorie"))
		{
			phpScript = "http://remin.site90.com/listaStorie.php";
			dialogMessage = "Recupero storie dal Database";
					Log.i("Info:", this.op);
		}
		if(this.op.equals("listaUtenti"))
		{
			phpScript = "http://remin.site90.com/listaUtenti.php";
			dialogMessage = "Recupero storie dal Database";
					Log.i("Info:", this.op);
		}
		if(this.op.equals("listaSuggerimenti"))
		{
			phpScript = "http://remin.site90.com/listaSuggerimenti.php";
			dialogMessage = "Recupero Suggerimenti dal Database";
		}
		if(this.op.equals("ricercaUtente"))
		{
			phpScript = "http://remin.site90.com/cercaUtente.php";
			dialogMessage = "Recupero Utente dal Database";
		}
		if(this.op.equals("uploadFoto"))
		{
			phpScript = "http://remin.site90.com/uploadFoto.php";
			dialogMessage = "Recupero Utente dal Database";
		}
		
	}
	
	@Override
	protected Object doInBackground(String... arg0)
	{
		JSONObject json = jsonParser.makeHttpRequest(phpScript, "POST", params);
		
		try 
        {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1)
            {
            	retVal = true;
            	if (this.op.equals("leggiUtente"))
            	{
            		JSONArray user = json.getJSONArray("Utente");
            		JSONObject c = user.getJSONObject(0);
            		
            		MainActivity.utente.nomeUtente = c.getString("IdUtente");
        			MainActivity.utente.nome = c.getString("Nome");
        			MainActivity.utente.cognome = c.getString("Cognome");
        			MainActivity.utente.dataN = c.getString("DataNascita");
        			MainActivity.utente.eMail = c.getString("EMail");
        			MainActivity.utente.descrizioneFoto = c.getString("DescrizioneFoto");
        			MainActivity.utente.info = c.getString("Info");
        			MainActivity.utente.password = c.getString("Password");
        			MainActivity.utente.statoCivile = c.getString("SitSentimentale");
        			MainActivity.utente.sesso = c.getString("Sesso");
        			MainActivity.utente.titoloStudio = c.getString("TitoloStudio");
        			MainActivity.utente.luogoN = c.getString("LuogoNascita");
        			MainActivity.utente.provincia = c.getString("Provincia");
        			MainActivity.utente.residenza = c.getString("Residenza");
        			MainActivity.utente.immagine = c.getString("FotoProfilo");
        			MainActivity.utente.login = c.getInt("LogIn");
        			MainActivity.utente.deviceID = c.getString("DeviceID");
        			MainActivity.utente.online = c.getInt("Online");
        			MainActivity.utente.profPrinc = c.getString("ProfPrinc");
        			MainActivity.utente.profAt = c.getString("ProfAt");
        			
        			byte[] byteArray = Base64.decode(MainActivity.utente.immagine, Base64.DEFAULT);
        			MainActivity.utente.bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
            	}
            	
            	if (this.op.equals("leggiAmico"))
            	{
            		JSONArray user = json.getJSONArray("Utente");
            		JSONObject c = user.getJSONObject(0);
            		
            		ProfiloAmico.amico.nomeUtente = c.getString("IdUtente");
        			ProfiloAmico.amico.nome = c.getString("Nome");
        			ProfiloAmico.amico.cognome = c.getString("Cognome");
        			ProfiloAmico.amico.dataN = c.getString("DataNascita");
        			ProfiloAmico.amico.eMail = c.getString("EMail");
        			ProfiloAmico.amico.descrizioneFoto = c.getString("DescrizioneFoto");
        			ProfiloAmico.amico.info = c.getString("Info");
        			ProfiloAmico.amico.password = c.getString("Password");
        			ProfiloAmico.amico.statoCivile = c.getString("SitSentimentale");
        			ProfiloAmico.amico.sesso = c.getString("Sesso");
        			ProfiloAmico.amico.titoloStudio = c.getString("TitoloStudio");
        			ProfiloAmico.amico.luogoN = c.getString("LuogoNascita");
        			ProfiloAmico.amico.provincia = c.getString("Provincia");
        			ProfiloAmico.amico.residenza = c.getString("Residenza");
        			ProfiloAmico.amico.immagine = c.getString("FotoProfilo");
        			ProfiloAmico.amico.login = c.getInt("LogIn");
        			ProfiloAmico.amico.deviceID = c.getString("DeviceID");
        			ProfiloAmico.amico.online = c.getInt("Online");
        			ProfiloAmico.amico.profPrinc = c.getString("ProfPrinc");
        			ProfiloAmico.amico.profAt = c.getString("ProfAt");
        			
        			byte[] byteArray = Base64.decode(ProfiloAmico.amico.immagine, Base64.DEFAULT);
        			ProfiloAmico.amico.bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
            	}
            	
            	if (this.op.equals("leggiStoria"))
            	{
            		JSONArray user = json.getJSONArray("Storia");
            		JSONObject c = user.getJSONObject(0);
            		
            		MainActivity.storia.idStoria = Integer.parseInt(c.getString("IdStoria"));
            		MainActivity.storia.titolo = c.getString("Titolo");
            		MainActivity.storia.testo = c.getString("Testo");
            		MainActivity.storia.anno = c.getString("Anno");
            		MainActivity.storia.luogo = c.getString("Luogo");
            		MainActivity.storia.nomeUtenteEs = c.getString("IdUtente");
            	}
            	if (this.op.equals("listaStorie"))
            	{
            		JSONArray storie = json.getJSONArray("Storie");
            		
            		if (ListaStorie.listaStorie != null)
        			{
        				ListaStorie.listaStorie = null; 
        				ListaStorie.listaStorie = new ArrayList<HashMap<String, String>>();
        			}
            		
            		for (int i = 0; i < storie.length(); i++)
            		{
            			Storia st = new Storia();
            			JSONObject c = storie.getJSONObject(i);
            			
            			st.idStoria = c.getInt("IdStoria");
            			st.titolo = c.getString("Titolo");
            			st.nomeUtenteEs = c.getString("nomeUtenteEs");
            			st.dataPub = c.getString("DataPub");
            			st.anno = c.getString("anno");
            			
            			
            			HashMap<String, String> map = new HashMap<String, String>();
            			map.put("idStoria", st.idStoria.toString());
            			map.put("titolo", st.titolo);
            			map.put("dataPub", st.dataPub);
            			map.put("anno", st.anno);
            			
            			ListaStorie.listaStorie.add(map);
            		}
            	}
            	
            	if (this.op.equals("ricercaUtenti"))
            	{
            		
            		JSONArray utenti = json.getJSONArray("Utenti");
            		
            		/*
            		if (RicercaUtente.listaUtenti != null)
        			{
            			RicercaUtente.listaUtenti = null; 
            			RicercaUtente.listaUtenti = new ArrayList<HashMap<String, String>>();
        			}
            		
            		for (int i = 0; i < utenti.length(); i++)
            		{
            			Utente ut = new Utente();
            			JSONObject c = utenti.getJSONObject(i);
            			
            			ut.nomeUtente = c.getString("nomeUtente");
            			ut.nome = c.getString("nome");
            			ut.cognome = c.getString("cognome");
            			ut.dataN = c.getString("dataN");
            			ut.luogoN = c.getString("luogoN");
            			
            			HashMap<String, String> map = new HashMap<String, String>();
            			map.put("nomeUtente", ut.nomeUtente);
            			map.put("nome", ut.nome);
            			map.put("cognome", ut.cognome);
            			map.put("dataN", ut.dataN);
            			map.put("luogoN", ut.luogoN);
            			
            			RicercaUtente.listaUtenti.add(map);
            		}
            		*/
            	}
            	
               	if (this.op.equals("listaUtenti"))
            	{
            		JSONArray utenti = json.getJSONArray("Utenti");
            		
            		if (RicercaUtente.listaUtenti != null)
        			{
            			RicercaUtente.listaUtenti = null; 
            			RicercaUtente.listaUtenti = new ArrayList<HashMap<String, String>>();
        			}
            		
            		for (int i = 0; i < utenti.length(); i++)
            		{
            			Utente ut = new Utente();
            			JSONObject c = utenti.getJSONObject(i);
            			
            			ut.nomeUtente = c.getString("nomeUtente");
            			ut.nome = c.getString("nome");
            			ut.cognome = c.getString("cognome");
            			ut.dataN = c.getString("dataN");
            			ut.luogoN = c.getString("luogoN");
            			ut.provincia = c.getString("provincia");
            			
            			HashMap<String, String> map = new HashMap<String, String>();
            			map.put("nomeUtente", ut.nomeUtente);
            			map.put("nome", ut.nome);
            			map.put("cognome", ut.cognome);
            			map.put("dataN", ut.dataN);
            			map.put("luogoN", ut.luogoN);
            			map.put("provincia", ut.provincia);
            			
            			RicercaUtente.listaUtenti.add(map);
            		}
            	}
               	
               	if (this.op.equals("listaSuggerimenti"))
            	{
            		JSONArray suggerimenti = json.getJSONArray("Suggerimenti");
            		
            		if (ListaSuggerimenti.listaSuggerimenti != null)
        			{
            			ListaSuggerimenti.listaSuggerimenti = null; 
            			ListaSuggerimenti.listaSuggerimenti = new ArrayList<HashMap<String, String>>();
        			}
            		
            		for (int i = 0; i < suggerimenti.length(); i++)
            		{
            			Suggerimento sugg = new Suggerimento();
            			JSONObject c = suggerimenti.getJSONObject(i);
            			
            			sugg.IdSuggerimento = c.getString("IdSuggerimento");
            			sugg.Testo = c.getString("Testo");
            			sugg.Tipo = c.getString("Tipo");
            			
            			HashMap<String, String> map = new HashMap<String, String>();
            			map.put("IdSuggerimento", sugg.IdSuggerimento);
            			map.put("Testo", sugg.Testo);
            			map.put("Tipo", sugg.Tipo);
            			
            			
            			ListaSuggerimenti.listaSuggerimenti.add(map);
            		}
            	}
              
            }
            else
            {
                retVal = false;
            }
        }
        catch (JSONException e)
        {
            e.printStackTrace();
            
        }
		
		return retVal;

	}

	protected void onProgressUpdate(Integer i)
	{
		
	}

	protected void onPostExecute(Object s)
	{
		super.onPostExecute(s);
		pDialog.dismiss();
	}
	
	protected void onPreExecute()
	{
		super.onPreExecute();
		pDialog = new ProgressDialog(activity);
        pDialog.setMessage(dialogMessage);
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
	}
}